class JsonpDecoratePlugin {
  /**
   * 构造函数
   * @param {Object} options - 插件配置选项
   * @param {Function} options.transform - 通用路径转换函数
   */
  constructor(options = {}) {
    this.options = {
      // 默认转换函数（不做任何修改）
      transform: (url) => url,
      // 可分别指定JS和CSS的转换函数
      transformJs: null,
      transformCss: null,
      ...options,
    };
  }

  apply(compiler) {
    const pluginName = this.constructor.name;

    // 1. 处理JS中的chunk加载路径（原逻辑）
    compiler.hooks.compilation.tap(pluginName, (compilation) => {
      // 处理JS chunk加载
      compilation.mainTemplate.hooks.requireExtensions.tap(
        pluginName,
        (source) => {
          console.log("source", source);
          return source;
        }
      );

      // // 2. 处理CSS中的资源路径（新增逻辑）
      // // 拦截css-loader生成的代码
      // compilation.mainTemplate.hooks.assetPath.tap(pluginName, (path, data) => {
      //   // 判断是否是CSS相关资源
      //   if (
      //     data.chunk &&
      //     data.chunk.files.some((file) => file.endsWith(".css"))
      //   ) {
      //     const cssTransform =
      //       this.options.transformCss || this.options.transform;
      //     // 应用CSS路径转换
      //     return cssTransform(path);
      //   }
      //   return path;
      // });

      // // 3. 处理通过url-loader等加载的图片、字体等资源
      // if (compilation.modules) {
      //   compilation.modules.forEach((module) => {
      //     // 处理CSS模块
      //     if (module.type.includes("css") || module.type.includes("style")) {
      //       module.parser.hooks.import.tap(pluginName, (url) => {
      //         const cssTransform =
      //           this.options.transformCss || this.options.transform;
      //         return cssTransform(url);
      //       });
      //     }
      //   });
      // }
    });

    // 4. 提供全局方法动态修改CSS转换规则
    // compiler.hooks.make.tap(pluginName, (compilation) => {
    //   compilation.assets["chunk-load-transformer.js"] = {
    //     source: () => `
    //       // 全局转换函数存储
    //       window.__chunkTransformers = {
    //         js: ${this.getFunctionString(
    //           this.options.transformJs || this.options.transform
    //         )},
    //         css: ${this.getFunctionString(
    //           this.options.transformCss || this.options.transform
    //         )}
    //       };
          
    //       // 动态修改JS转换规则
    //       window.setJsChunkTransformer = function(transformer) {
    //         if (typeof transformer === 'function') {
    //           window.__chunkTransformers.js = transformer;
    //           return true;
    //         }
    //         console.error('转换函数必须是一个函数');
    //         return false;
    //       };
          
    //       // 动态修改CSS转换规则
    //       window.setCssChunkTransformer = function(transformer) {
    //         if (typeof transformer === 'function') {
    //           window.__chunkTransformers.css = transformer;
    //           // 对于已加载的CSS，需要重新应用样式
    //           document.querySelectorAll('link[rel="stylesheet"]').forEach(link => {
    //             const newLink = document.createElement('link');
    //             newLink.rel = 'stylesheet';
    //             newLink.href = transformer(link.href);
    //             link.parentNode.replaceChild(newLink, link);
    //           });
    //           return true;
    //         }
    //         console.error('转换函数必须是一个函数');
    //         return false;
    //       };
    //     `,
    //     size: () => Buffer.byteLength(this.source(), "utf8"),
    //   };
    // });
  }

  /**
   * 获取函数的字符串表示
   */
  getFunctionString(fn) {
    return typeof fn === "function" ? fn.toString() : "(url) => url";
  }
}

module.exports = JsonpDecoratePlugin;
